Matching the bouy data to the other data collected
hilo <- hbb_wku_h_xts
hilo <- data.frame(date=index(hilo), coredata(hilo))
hilo <- hilo[529:54816,]
hilo
# which(hilo$date=="2010-10-23 00:00:00") = index 529
# which(hilo$date=="2016-12-31 23:00:00") = index 54816
length(hilo[,1]) # we are left with 54288 lines of data
[1] 54288
54816 - length(hilo[,1]) # we lost 528 values
[1] 528
Changing column names
# removing columns that we are not using
hilo$date.2 <- NULL # another date column
hilo$date.1 <- NULL # another date column
hilo$BGARFU <- NULL # ?
hilo$cfs <- NULL
hilo$DOmgL <- NULL # dissolved oxygen
#hilo$Doper <- NULL # dissolved oxygen
hilo$PAR1 <- NULL # ?
hilo$pH <- NULL # pH
hilo$NTU <- NULL # a different measurement for turbitity
hilo$DOper10 <- NULL # dissolved oxygen
# colnames(hilo) <- c("Date", "cfs", "RiverFlow-cumec", "LogRiverFlow-cumec", "Chlorophyll-RFU", "Salinity-PPT", "Temp-C", "chlorophyll-calibrator", "Turbidity-NTU")
# does not work ???
hilo
====================================================
FULL DATA SET 2012-2016
Descriptives: PLots
River Flow FULL DATA SET
length(hilo$logcms[which(is.na(hilo$logcms)==TRUE)]) # 12 NAs
[1] 12
which(is.na(hilo$logcms)==TRUE)
[1] 50509 50510 50511 50512 50513 50514 50515 50516 50517 50518 50519
[12] 50520
RiverFlow <- ggplot(hilo, aes(x = date, y = as.numeric(cms))) +
geom_line()
print(RiverFlow + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))

CHL FULL DATA SET
length(hilo$ChlRFU[which(is.na(hilo$ChlRFU)==TRUE)]) # 20464 NAs
[1] 20464
which(as.numeric(hilo$ChlRFU)==max(as.numeric(na.omit(hilo$ChlRFU)))) # 15.3 max
[1] 38974
# CHL tells us where in the data set this happened
hilo[38974,]
CHL <- ggplot(hilo, aes(x = date, y = as.numeric(ChlRFU))) +
geom_line()
print(CHL + ggtitle("Chlorophyll ")+labs(x="Time", y = "Chlorophyll - relative fluorescence units (RFU)"))

Turbity FULL DATA SET
length(hilo$Corr.NTU[which(is.na(hilo$Corr.NTU)==TRUE)]) #15012 NAs
[1] 15012
which(as.numeric(hilo$Corr.NTU)==max(as.numeric(na.omit(hilo$Corr.NTU)))) # 88.4
[1] 33243
# tells us where in the data set this happened
hilo[33243,]
TURB <- ggplot(hilo,aes(x = date, y = as.numeric(Corr.NTU))) +
geom_line()
print(TURB + ggtitle("Turbidity ")+labs(x="Time", y = "Turbidity - Nephelometric Turbidity Units (NTU)"))

Salinity FULL DATA SET
length(hilo$saltppt[which(is.na(hilo$saltppt)==TRUE)]) #11330 NAs
[1] 0
SALT <- ggplot(hilo, aes(x = date, y = as.numeric(saltppt))) +
geom_line()
print(SALT + ggtitle("Salinity")+labs(x="Time", y = "Salinity - unit parts per thousand (PPT)"))
Error in FUN(X[[i]], ...) : object 'saltppt' not found

======================================================== # Histograms FULL DATA SET ## River Flow Histogram
CHL Histogram
Turbity Histogram
Salinity Histogram
========================================================= # NEW DATA SET-Modified Data 2013-2015
# start date: 2013-01-01 00:00:00
# end date: 2015-12-31 23:00:00
hilomodified <- hilo[19225:45504,]
length(hilo[,1])-length(hilomodified[,1])
[1] 28008
# lost 28008 entries of data
length(hilomodified[,1])-528 # we are left with 25752 entries of data
[1] 25752
head(hilomodified)
tail(hilomodified)
NA
Descriptives on all variables MODIFIED DATA SET: Using Favstats
River Flow Favstats
CHL Favstats
Turbitity Favstats
Salinity Favstats
===================================================== # MODIFIED DATA SET 2013-2015 # Descriptives: Plots
River Flow MODIFIED
CHL MODIFIED
Turbitity MODIFIED
Salinity MODIFIED
Tempurature MODIFIED
Dissolved Oxygen MODIFIED
length(hilomodified$Doper[which(is.na(hilomodified$Doper)==TRUE)]) # 2267 NAs
TempMod <- ggplot(hilomodified, aes(x = date, y = as.numeric(Doper))) +
geom_line()
print(TempMod + ggtitle("Dissolved Oxygen")+labs(x="Time", y = "Dissolved Oxygen in percent of saturation"))
=================================================== # Histograms MODIFIED
River Flow MODIFIED
hist(as.numeric(hilomodified$cms), main = "Histogram of Log River Flow", xlab = "Log River Flow", breaks =90, xlim = c(0,100))

# this looks okay
CHL MODIFIED
Turbitity MODIFIED
Salinity MODIFIED
# skewed
hist(as.numeric(hilomodified$saltppt), main = "Histogram of Salinity", xlab = "Salinity - unit parts per thousand (PPT)")
# this is worst!
hist(log(as.numeric(hilomodified$saltppt)), main = "Histogram of Log Salinity", xlab = "Salinity")
# not sure what happens to units when taking the log
=============================================================
Plot with ALL Var 2013-2015
It is hard to see what is going on
============================================================== # Descriptives by Storm We are picking one storm from each year. We can indicate a storm has occurred by the extreme events in the river flow data. We will not use the log (which is logbase10) in order to see the extreme events When salinity is below 35 this also indicates a storm has occurred.
We will break the data set by year to find the most extreme event for each year.
2013 Data & Plot
Split 2013 into 6 months to get a better visual
2014 Data & Plot
2015 Data & Plot
# Separating the Data by Storm Events
Separating the Data by Storm
Trying to make the Rainfall plot easier to read
RiverFlow1 <- ggplot(hilomodified[1:100,], aes(x = date, y = as.numeric(cms))) +
geom_line()
print(RiverFlow + ggtitle("River Flow")+labs(x="Time", y = "River Flow - cubic meters per second"))
=======
NEW Change in River Flow Column
length(end)
[1] 72
for(i in 1:length(start)){
storm <- ggplot(hilomodified[(start[i]-24):(end[i]+24),], aes(x = date, y = as.numeric(cms))) +
geom_line(color="black")+
geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")
print(storm + ggtitle("Storm 1/7/13")+labs(x="Time"))
}








































































ChangeRF <- function(x = vector()){
change <- c(0)
for(i in 1:(length(x)-1)){
change[i+1] <- x[i]-x[i+1]
}
return(change)
}
change.vector <- c(ChangeRF(as.numeric(hilomodified$cms)))
change.vector
[1] 0.00000 0.02124 0.02832 0.02124 0.02832
[6] 0.00708 0.00000 0.02124 0.02124 0.02832
[11] 0.01416 0.00000 0.00708 0.00708 0.01416
[16] 0.02124 0.00708 0.00708 0.01416 0.03540
[21] 0.00000 0.01416 0.00000 0.02832 0.02124
[26] 0.02124 0.00000 0.01416 0.01416 0.00000
[31] 0.00000 0.00000 0.02832 -0.00708 0.02124
[36] 0.00000 0.01416 0.02124 0.00000 0.02124
[41] 0.01416 0.00000 0.00000 0.00708 0.00708
[46] 0.00708 0.02832 0.00708 0.00708 0.01416
[51] 0.00000 0.00708 0.00000 0.00000 0.02124
[56] 0.00000 0.01416 0.02124 -0.01416 0.01416
[61] 0.00000 0.00000 0.00708 0.02124 0.00708
[66] 0.00708 0.01416 0.00000 0.00000 0.00708
[71] 0.02832 0.00708 0.00708 0.00708 0.01416
[76] 0.00000 0.00000 -0.01416 0.01416 0.01416
[81] 0.00000 0.00000 0.00000 0.00000 0.00000
[86] -0.00708 -0.02832 -0.04248 -0.00708 0.00000
[91] -0.02124 -0.02832 -0.04248 -0.02124 -0.01416
[96] -0.02124 -0.02124 0.01416 0.03540 0.00708
[101] 0.00000 0.00708 0.00708 -0.19116 -0.25488
[106] -0.29028 -0.16284 0.09204 -0.33984 -0.44604
[111] 0.04956 0.16284 0.12036 -0.11328 -0.22656
[116] -0.27612 -0.31152 -1.13988 -1.58592 0.59472
[121] 0.67968 0.49560 0.14160 0.00708 0.21948
[126] 0.04248 -0.41064 -0.95580 -0.45312 0.32568
[131] 0.53100 0.54516 0.56640 0.32568 0.29736
[136] 0.06372 -0.45312 -0.82836 -0.63720 -1.22484
[141] -1.92576 -2.30100 -2.73996 -1.72044 -0.54516
[146] -0.25488 -0.09912 -0.43896 -1.32396 -1.54344
[151] -1.43724 -1.09032 -0.55224 -0.10620 0.44604
[156] 0.92748 1.83372 2.47092 2.03196 1.81248
[161] 1.60008 1.35228 1.06908 0.86376 0.75756
[166] 0.66552 0.54516 0.43188 0.43896 0.31860
[171] 0.26196 0.24780 0.19116 0.16992 0.09912
[176] 0.13452 0.04956 0.09912 0.02124 0.04956
[181] 0.02832 0.03540 0.00000 0.05664 0.02124
[186] 0.02832 0.02832 0.04248 -0.00708 0.00708
[191] -0.07788 -0.12036 -0.04956 -0.16284 -0.12036
[196] -0.21240 -0.20532 -0.25488 -0.80004 0.01416
[201] 0.05664 -0.24780 -0.41064 0.06372 0.24780
[206] 0.27612 0.22656 0.24780 0.12036 0.02832
[211] -0.35400 -1.84080 -5.09760 -6.35784 -10.52088
[216] -4.71528 3.39840 4.29756 3.27096 2.61252
[221] 2.20188 1.98948 1.67088 1.46556 1.35228
[226] 1.20360 1.00536 0.80004 0.75048 0.56640
[231] 0.51684 0.40356 0.40356 0.34692 0.24780
[236] 0.02124 0.00708 0.14868 0.10620 0.19116
[241] 0.14160 0.12036 0.11328 0.09204 0.05664
[246] 0.03540 0.05664 0.02124 0.06372 0.07080
[251] 0.02124 0.02832 0.04956 0.03540 0.04956
[256] 0.02124 0.01416 0.04956 0.04248 0.04248
[261] 0.02124 0.04956 0.01416 0.03540 0.02832
[266] 0.04248 0.03540 0.02124 0.04956 0.03540
[271] 0.00708 0.05664 0.04248 0.02832 0.03540
[276] 0.03540 0.04248 0.02832 0.02124 0.02832
[281] 0.03540 0.03540 0.03540 0.02124 0.05664
[286] 0.01416 -0.04956 -0.18408 0.14160 0.07788
[291] -0.04956 -0.09912 -0.19824 -0.23364 -0.36108
[296] -0.16284 0.06372 0.14868 0.19116 0.18408
[301] 0.14868 0.11328 0.08496 0.05664 0.07080
[306] 0.04248 0.02832 0.02832 0.02832 0.05664
[311] 0.02832 0.00708 0.04248 0.00708 0.02124
[316] 0.02832 0.02832 0.02832 0.01416 0.02832
[321] 0.01416 0.01416 0.01416 0.02832 0.01416
[326] 0.02124 0.01416 0.00708 0.00000 0.03540
[331] 0.01416 0.02124 0.02124 0.01416 0.00708
[336] 0.01416 0.00708 0.02832 0.01416 0.02124
[341] 0.00000 0.00708 0.00000 0.02832 0.01416
[346] 0.02124 -0.00708 0.02832 -0.00708 0.02124
[351] 0.00708 0.00000 0.00000 0.02124 0.00708
[356] 0.00708 0.01416 0.00708 0.00708 0.02124
[361] 0.00708 0.03540 0.00000 0.00708 0.02124
[366] 0.01416 0.00000 0.02124 0.01416 0.00708
[371] 0.01416 0.00000 0.02832 -0.02124 0.01416
[376] 0.00708 -0.01416 0.00708 0.02124 0.00000
[381] 0.01416 0.00000 0.00708 -0.00708 0.02124
[386] 0.01416 0.02124 0.00708 0.00708 0.01416
[391] 0.00000 0.02124 0.00000 0.00708 0.00000
[396] 0.02124 -0.01416 0.02124 0.00708 0.01416
[401] 0.00708 0.01416 0.00000 0.01416 0.00000
[406] 0.00000 0.02124 0.00708 0.00000 0.00708
[411] 0.00708 0.01416 0.00000 0.00000 0.00000
[416] 0.02124 -0.01416 0.02832 0.00000 0.01416
[421] 0.00708 0.00000 0.00000 0.00000 0.00000
[426] 0.00708 0.01416 0.01416 0.00708 0.01416
[431] 0.01416 0.00708 -0.00708 0.01416 0.00000
[436] 0.00000 0.00708 0.01416 -0.07080 -0.56640
[441] 0.01416 0.21948 0.16284 0.10620 0.05664
[446] 0.04956 0.02124 0.01416 0.01416 0.02124
[451] 0.01416 0.00708 0.00000 0.00708 0.00708
[456] 0.01416 0.02124 0.00000 0.00708 0.00000
[461] 0.00000 0.00000 0.00000 0.01416 0.00708
[466] 0.00708 0.00000 0.00000 0.00000 0.00000
[471] 0.00000 0.00708 0.01416 0.00708 0.00708
[476] 0.00708 0.01416 0.00000 0.00000 0.00000
[481] 0.00000 0.00708 0.00708 0.01416 0.00000
[486] 0.00000 0.00000 0.00000 0.00000 0.01416
[491] 0.00000 0.01416 0.00000 0.00000 0.01416
[496] 0.00708 0.00708 0.00000 0.00000 0.00000
[501] 0.00000 0.00000 0.01416 0.00708 0.00708
[506] 0.00000 0.00000 0.00000 0.00000 0.00000
[511] 0.00000 0.00000 0.00708 0.01416 0.00000
[516] 0.00000 0.00708 0.00000 0.00000 0.00000
[521] 0.00000 0.00000 0.01416 0.01416 0.00000
[526] 0.00000 0.00000 0.00000 0.00000 0.00000
[531] 0.00000 0.00708 0.00000 0.00708 0.00708
[536] 0.00000 0.00000 0.00708 0.00000 0.00000
[541] 0.00000 0.00000 -0.00708 0.00708 0.00000
[546] 0.00000 0.00000 0.00000 0.01416 0.01416
[551] -0.01416 0.00708 0.00000 -0.01416 0.00708
[556] 0.00000 -0.01416 0.00000 -0.02124 -0.00708
[561] 0.00000 0.00000 0.00000 0.00000 0.00000
[566] 0.00000 0.00000 0.02832 0.00000 0.00000
[571] 0.02124 0.00708 0.00000 0.00708 -0.00708
[576] 0.00000 0.01416 -0.00708 -0.01416 -0.02124
[581] -0.00708 -0.01416 -0.00708 0.00000 -0.02124
[586] -0.00708 0.00000 0.00000 0.00000 0.00708
[591] 0.01416 0.00708 0.01416 0.01416 0.00708
[596] 0.02124 0.00000 0.00000 0.00708 0.02124
[601] 0.00000 0.00000 0.00708 0.00708 0.01416
[606] 0.00000 0.00000 0.00000 0.00000 0.00000
[611] 0.00000 0.01416 0.01416 0.00000 0.00000
[616] 0.00000 0.00000 0.00000 0.00000 0.00708
[621] 0.00708 0.01416 0.00000 0.00000 0.00000
[626] 0.00000 0.00000 0.00000 0.00000 0.00000
[631] 0.00000 0.00000 0.00000 0.00000 0.00708
[636] -0.00708 0.02832 -0.00708 0.00708 0.00000
[641] 0.00000 0.00000 0.00000 0.00000 0.00708
[646] -0.00708 0.00000 0.00708 0.00708 0.01416
[651] -0.00708 0.00708 0.00000 0.00000 0.00000
[656] 0.00000 -0.07080 -0.14868 0.00000 0.04248
[661] 0.04956 0.04248 0.02832 0.02124 0.00708
[666] 0.02124 0.00708 0.00000 0.00000 0.01416
[671] 0.00708 0.00708 0.00000 0.00000 0.00000
[676] 0.00000 0.00000 0.00000 0.00000 0.00000
[681] 0.00000 0.00000 0.00000 0.00000 0.00000
[686] 0.00000 0.00000 0.00000 -0.04956 -0.08496
[691] -0.33984 -0.17700 0.19824 0.13452 0.06372
[696] 0.02832 0.02832 0.02832 0.02832 0.02124
[701] 0.02124 0.01416 0.02124 0.00708 0.00000
[706] 0.00708 0.02124 0.00000 0.00000 0.00708
[711] 0.00708 0.01416 -0.00708 -0.01416 0.00708
[716] 0.01416 0.00000 0.00000 0.00000 0.00000
[721] 0.00000 0.00000 0.00000 0.01416 0.00708
[726] 0.00000 0.00708 0.00000 -0.02124 0.00708
[731] 0.01416 0.00000 0.00000 0.00000 0.00000
[736] 0.00000 0.00000 0.00000 0.00000 0.00000
[741] 0.02124 0.00708 0.00000 0.00000 0.00000
[746] 0.00000 -0.02124 -0.02124 -0.06372 -0.08496
[751] -0.10620 -0.14868 -0.46020 -0.33984 -0.02124
[756] 0.09912 0.19116 0.15576 0.12744 0.09912
[761] 0.07788 0.07788 0.05664 0.03540 0.03540
[766] 0.02832 0.02832 0.02124 0.02124 0.01416
[771] 0.02124 0.00708 0.02832 0.00000 0.00708
[776] 0.02124 0.00000 0.00000 0.00708 0.02124
[781] 0.00000 0.00000 0.00000 0.02124 0.00708
[786] 0.00000 0.00000 0.00000 0.00000 0.00708
[791] 0.01416 0.00708 0.00000 0.00000 0.00000
[796] 0.00000 0.00000 0.00000 0.00000 0.00000
[801] 0.00000 0.00708 0.00000 0.02124 -0.01416
[806] 0.00708 0.00708 0.00000 0.00000 0.00000
[811] 0.00000 0.00000 0.00000 0.00000 0.00708
[816] 0.00000 -0.02124 -0.08496 -0.04248 0.00000
[821] 0.00000 0.00000 0.00000 0.00000 0.00000
[826] 0.00000 0.00000 0.00000 0.01416 0.00000
[831] -0.00708 0.02124 -0.02124 -0.03540 0.02832
[836] 0.02832 0.00000 0.00708 -0.00708 0.02124
[841] -0.01416 -0.00708 0.00000 -0.01416 -0.04956
[846] -0.02124 -0.02832 -0.03540 -0.03540 -0.04956
[851] -0.12036 -0.07080 -0.14160 -0.09912 -0.01416
[856] 0.04956 0.04956 0.06372 0.05664 0.00000
[861] 0.00708 0.00000 0.00708 0.01416 0.00708
[866] -0.00708 0.00000 0.00708 0.00000 0.00000
[871] 0.00000 0.00708 0.01416 0.02124 0.01416
[876] 0.01416 0.01416 0.00708 0.02124 0.00000
[881] 0.00708 -0.00708 -0.04956 -0.03540 -0.47436
[886] -2.93112 -4.42500 1.09032 0.65844 0.18408
[891] -1.51512 -5.38788 -10.78992 -15.70344 -2.61960
[896] 6.15960 6.93840 4.41792 4.63032 3.46920
[901] 2.68332 1.99656 1.49388 1.43724 2.80368
[906] -0.43896 0.39648 0.50976 0.41772 0.29736
[911] 0.30444 0.23364 0.16992 0.03540 0.11328
[916] 0.17700 0.13452 0.16284 0.16992 0.07080
[921] 0.09204 0.12744 0.07080 0.08496 0.09912
[926] 0.10620 0.07788 0.07788 0.07080 0.07788
[931] 0.07788 0.09912 0.07080 0.04248 0.07080
[936] 0.08496 0.06372 0.05664 0.04956 0.04956
[941] 0.04248 0.04956 0.04248 0.04956 0.02832
[946] 0.04956 0.01416 0.02832 0.04248 0.03540
[951] -0.02832 -0.00708 0.01416 -0.04248 -0.22656
[956] -0.43188 -0.77880 -0.53100 -0.30444 -0.81420
[961] -1.50096 -1.16820 -0.21240 -0.11328 0.22656
[966] 0.46020 0.49560 0.46728 0.47436 0.41064
[971] 0.58764 0.67968 0.36108 0.23364 0.15576
[976] 0.13452 0.07788 0.12744 0.07788 0.12036
[981] 0.08496 0.06372 0.07080 0.10620 0.02124
[986] -0.00708 0.08496 0.07080 0.03540 0.05664
[991] 0.02124 0.06372 0.05664 0.04956 0.04248
[996] 0.03540 0.03540 0.04956 0.02124 0.04248
[ reached getOption("max.print") -- omitted 25280 entries ]
length(ChangeRF(as.numeric(hilomodified$cms)))
[1] 26280
length(hilomodified$cms) # same length
[1] 26280
hilomodified$changeCMS <- change.vector
head(hilomodified)
# 10-11 negative start of storm
# 11-10 positive end of storm
positive.change <- vector()
negative.change <- vector()
index <- vector()
for(i in 1:length(hilomodified$cms)){
if (hilomodified$changeCMS[i] < 0 ){
negative.change[i] <- i
}else{
if(hilomodified$changeCMS[i] > 0){
postive.change[i] <- i
}
}
if(hilomodified$cms[i] >= 10 ){
index[i] <- i
}
}
index
positive.change
negative.change
length(which(index > 0))
storms <- sort(c(positive.change,negative.change), decreasing = FALSE)
storms
hilostorms <- hilomodified[storms,]
hilostorms
storm <- ggplot(hilostorms[50:250,], aes(x = date, y = as.numeric(cms))) +
geom_line(color="black")+
geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")
print(storm + ggtitle("Storm 1/7/13")+labs(x="Time"))

vector <- vector()
for(i in 1:length(storms)){
if(isTRUE(abs(storms[i]-storms[i+1]) > 10)){
stop <- storms[i]
}else{
stop <- 0
}
if(stop > 0){
vector[i] <- stop
}
}
vector[which(is.na(vector)==FALSE)]
[1] 622 672 1706 1898 1924 1970 2081 2327 2388
[10] 2429 2469 2493 2515 2537 2576 2714 2734 2772
[19] 2799 2825 2866 2947 2998 3051 3068 3130 3196
[28] 3211 3226 3249 3373 3746 3841 3856 3898 4343
[37] 4412 4438 4460 4507 4534 4617 4660 4827 5006
[46] 5087 5107 5135 5237 5667 5690 5735 5767 5786
[55] 5837 5851 5888 5900 5921 5968 6048 6068 6092
[64] 6240 6270 6284 6320 6363 6379 6456 6488 6599
[73] 6630 6864 6888 6908 6945 6959 6977 6999 7025
[82] 7063 7076 7099 7134 7150 7222 7308 7443 7466
[91] 7493 7678 7703 7733 7786 7805 7840 7863 7882
[100] 7933 7960 7978 8005 8031 8124 8167 8954 9013
[109] 9067 9091 9135 9160 9188 9256 9280 9303 9333
[118] 9377 9487 9505 10205 12119 12216 12238 13083 13095
[127] 14759 14786 14812 14831 14891 14946 14998 15028 15079
[136] 15099 15125 15140 15165 15187 15209 15526 15540 15553
[145] 15702 17365 17482 17512 17533 17585 17612 17657 17708
[154] 17734 17778 17811 17838 17871 17925 17978 18210 18233
[163] 18358 18888 18905 18921 19117 19192 19225 19269 19322
[172] 19342 19362 19378 19490 19504 19522 19628 21792 21813
[181] 21948 21981 22016 22075 22124 22220 23568
storm.1.7.13 <- ggplot(hilomodified[1:80,], aes(x = date, y = as.numeric(cms))) +
geom_line(color="black")+
geom_line(aes(y = as.numeric(Corr.NTU)), color="grey69") +
geom_line(aes(y=as.numeric(ChlRFU)),color="khaki")
print(storm.1.7.13 + ggtitle("Storm 1/7/13")+labs(x="Time"))

LS0tCnRpdGxlOiAiRGF0YSBDbGVhbmluZyAmIERlc2NyaXB0aXZlcyIKYXV0aG9yOiAiQnJpYW5uYSBDaXJpbGxvICYgT2RhbHlzIEJhcnJpZW50b3MiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KIyBNYXRjaGluZyB0aGUgYm91eSBkYXRhIHRvIHRoZSBvdGhlciBkYXRhIGNvbGxlY3RlZCAKYGBge3J9CmhpbG8gPC0gaGJiX3drdV9oX3h0cwpoaWxvIDwtIGRhdGEuZnJhbWUoZGF0ZT1pbmRleChoaWxvKSwgY29yZWRhdGEoaGlsbykpCmhpbG8gPC0gaGlsb1s1Mjk6NTQ4MTYsXQpoaWxvCiMgd2hpY2goaGlsbyRkYXRlPT0iMjAxMC0xMC0yMyAwMDowMDowMCIpID0gaW5kZXggNTI5IAoKIyB3aGljaChoaWxvJGRhdGU9PSIyMDE2LTEyLTMxIDIzOjAwOjAwIikgPSBpbmRleCA1NDgxNgpgYGAKYGBge3J9Cmxlbmd0aChoaWxvWywxXSkgIyB3ZSBhcmUgbGVmdCB3aXRoIDU0Mjg4IGxpbmVzIG9mIGRhdGEKCjU0ODE2IC0gbGVuZ3RoKGhpbG9bLDFdKSAjIHdlIGxvc3QgNTI4IHZhbHVlcyAKYGBgCgojIENoYW5naW5nIGNvbHVtbiBuYW1lcyAKYGBge3J9CiMgcmVtb3ZpbmcgY29sdW1ucyB0aGF0IHdlIGFyZSBub3QgdXNpbmcgCmhpbG8kZGF0ZS4yIDwtIE5VTEwgIyBhbm90aGVyIGRhdGUgY29sdW1uCmhpbG8kZGF0ZS4xIDwtIE5VTEwgIyBhbm90aGVyIGRhdGUgY29sdW1uCmhpbG8kQkdBUkZVIDwtIE5VTEwgIyA/CmhpbG8kY2ZzIDwtIE5VTEwKaGlsbyRET21nTCA8LSBOVUxMICMgZGlzc29sdmVkIG94eWdlbgojaGlsbyREb3BlciA8LSBOVUxMICMgZGlzc29sdmVkIG94eWdlbgpoaWxvJFBBUjEgPC0gTlVMTCAjID8KaGlsbyRwSCA8LSBOVUxMICMgcEgKaGlsbyROVFUgPC0gTlVMTCAjIGEgZGlmZmVyZW50IG1lYXN1cmVtZW50IGZvciB0dXJiaXRpdHkKaGlsbyRET3BlcjEwIDwtIE5VTEwgIyBkaXNzb2x2ZWQgb3h5Z2VuCgojIGNvbG5hbWVzKGhpbG8pIDwtIGMoIkRhdGUiLCAiY2ZzIiwgIlJpdmVyRmxvdy1jdW1lYyIsICJMb2dSaXZlckZsb3ctY3VtZWMiLCAiQ2hsb3JvcGh5bGwtUkZVIiwgIlNhbGluaXR5LVBQVCIsICJUZW1wLUMiLCAiY2hsb3JvcGh5bGwtY2FsaWJyYXRvciIsICJUdXJiaWRpdHktTlRVIikKIyBkb2VzIG5vdCB3b3JrID8/PwoKaGlsbwpgYGAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMgRlVMTCBEQVRBIFNFVCAyMDEyLTIwMTYKIyBEZXNjcmlwdGl2ZXM6IFBMb3RzCgojIyBSaXZlciBGbG93IEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJGxvZ2Ntc1t3aGljaChpcy5uYShoaWxvJGxvZ2Ntcyk9PVRSVUUpXSkgIyAxMiBOQXMgCndoaWNoKGlzLm5hKGhpbG8kbG9nY21zKT09VFJVRSkKClJpdmVyRmxvdyA8LSBnZ3Bsb3QoaGlsbywgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFJpdmVyRmxvdyArIGdndGl0bGUoIlJpdmVyIEZsb3ciKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQpgYGAKIyMgQ0hMIEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJENobFJGVVt3aGljaChpcy5uYShoaWxvJENobFJGVSk9PVRSVUUpXSkgIyAyMDQ2NCBOQXMKCndoaWNoKGFzLm51bWVyaWMoaGlsbyRDaGxSRlUpPT1tYXgoYXMubnVtZXJpYyhuYS5vbWl0KGhpbG8kQ2hsUkZVKSkpKSAjIDE1LjMgbWF4IAojIENITCB0ZWxscyB1cyB3aGVyZSBpbiB0aGUgZGF0YSBzZXQgdGhpcyBoYXBwZW5lZCAgCmhpbG9bMzg5NzQsXQoKQ0hMIDwtIGdncGxvdChoaWxvLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhDaGxSRlUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoQ0hMICsgZ2d0aXRsZSgiQ2hsb3JvcGh5bGwgIikrbGFicyh4PSJUaW1lIiwgeSA9ICJDaGxvcm9waHlsbCAgLSByZWxhdGl2ZSBmbHVvcmVzY2VuY2UgdW5pdHMgKFJGVSkiKSkKYGBgCiMjIFR1cmJpdHkgRlVMTCBEQVRBIFNFVApgYGB7cn0KbGVuZ3RoKGhpbG8kQ29yci5OVFVbd2hpY2goaXMubmEoaGlsbyRDb3JyLk5UVSk9PVRSVUUpXSkgIzE1MDEyIE5BcwoKd2hpY2goYXMubnVtZXJpYyhoaWxvJENvcnIuTlRVKT09bWF4KGFzLm51bWVyaWMobmEub21pdChoaWxvJENvcnIuTlRVKSkpKSAjIDg4LjQKIyB0ZWxscyB1cyB3aGVyZSBpbiB0aGUgZGF0YSBzZXQgdGhpcyBoYXBwZW5lZApoaWxvWzMzMjQzLF0KClRVUkIgPC0gZ2dwbG90KGhpbG8sYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpKSArIAogIGdlb21fbGluZSgpCgpwcmludChUVVJCICsgZ2d0aXRsZSgiVHVyYmlkaXR5ICIpK2xhYnMoeD0iVGltZSIsIHkgPSAiVHVyYmlkaXR5IC0gTmVwaGVsb21ldHJpYyBUdXJiaWRpdHkgVW5pdHMgKE5UVSkiKSkKYGBgCiMjIFNhbGluaXR5IEZVTEwgREFUQSBTRVQKYGBge3J9Cmxlbmd0aChoaWxvJHNhbHRwcHRbd2hpY2goaXMubmEoaGlsbyRzYWx0cHB0KT09VFJVRSldKSAjMTEzMzAgTkFzCgpTQUxUIDwtIGdncGxvdChoaWxvLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSkpICsgCiAgZ2VvbV9saW5lKCkKCnByaW50KFNBTFQgKyBnZ3RpdGxlKCJTYWxpbml0eSIpK2xhYnMoeD0iVGltZSIsIHkgPSAiU2FsaW5pdHkgLSB1bml0IHBhcnRzIHBlciB0aG91c2FuZCAoUFBUKSIpKQpgYGAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgSGlzdG9ncmFtcyBGVUxMIERBVEEgU0VUCiMjIFJpdmVyIEZsb3cgSGlzdG9ncmFtCmBgYHtyfQpoaXN0KGFzLm51bWVyaWMoaGlsbyRsb2djbXMpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMb2cgUml2ZXIgRmxvdyIsIHhsYWIgPSAiTG9nIFJpdmVyIEZsb3ciKQoKIyB0aGlzIGxvb2tzIG9rYXkKYGBgCiMjIENITCBIaXN0b2dyYW0KYGBge3J9CiMgVkVSWSBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG8kQ2hsUkZVKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgQ2hsb3JvcGh5bGwiLCB4bGFiID0gIkNobG9yb3BoeWxsICAtIHJlbGF0aXZlIGZsdW9yZXNjZW5jZSB1bml0cyAoUkZVKSIpCgojIHRoaXMgbG9va3MgYmV0dGVyCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsbyRDaGxSRlUpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIENobG9yb3BoeWxsIiwgeGxhYiA9ICJDaGxvcm9waHlsbCIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAojIyBUdXJiaXR5IEhpc3RvZ3JhbQpgYGB7cn0KIyBWRVJZIHNrZXdlZApoaXN0KGFzLm51bWVyaWMoaGlsbyRDb3JyLk5UVSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIFR1cmJpZGl0eSIsIHhsYWIgPSAiVHVyYmlkaXR5IC0gTmVwaGVsb21ldHJpYyBUdXJiaWRpdHkgVW5pdHMgKE5UVSkiKQoKIyB0aGlzIGxvb2tzIGJldHRlcgpoaXN0KGxvZyhhcy5udW1lcmljKGhpbG8kQ29yci5OVFUpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFR1cmJpZGl0eSIsIHhsYWIgPSAiVHVyYmlkaXR5IikKIyBub3Qgc3VyZSB3aGF0IGhhcHBlbnMgdG8gdW5pdHMgd2hlbiB0YWtpbmcgdGhlIGxvZyAKYGBgCiMjIFNhbGluaXR5IEhpc3RvZ3JhbQpgYGB7cn0KIyBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG8kc2FsdHBwdCksIG1haW4gPSAiSGlzdG9ncmFtIG9mIFNhbGluaXR5IiwgeGxhYiA9ICJTYWxpbml0eSAtIHVuaXQgcGFydHMgcGVyIHRob3VzYW5kIChQUFQpIikKCiMgdGhpcyBpcyB3b3JzdCEKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvJHNhbHRwcHQpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFNhbGluaXR5IiwgeGxhYiA9ICJTYWxpbml0eSIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTkVXIERBVEEgU0VULU1vZGlmaWVkIERhdGEgMjAxMy0yMDE1CmBgYHtyfQojIHN0YXJ0IGRhdGU6IDIwMTMtMDEtMDEgMDA6MDA6MDAKIyBlbmQgZGF0ZTogMjAxNS0xMi0zMSAyMzowMDowMApoaWxvbW9kaWZpZWQgPC0gaGlsb1sxOTIyNTo0NTUwNCxdCmxlbmd0aChoaWxvWywxXSktbGVuZ3RoKGhpbG9tb2RpZmllZFssMV0pCiMgbG9zdCAyODAwOCBlbnRyaWVzIG9mIGRhdGEgCgpsZW5ndGgoaGlsb21vZGlmaWVkWywxXSktNTI4ICMgd2UgYXJlIGxlZnQgd2l0aCAyNTc1MiBlbnRyaWVzIG9mIGRhdGEgCgoKaGVhZChoaWxvbW9kaWZpZWQpCnRhaWwoaGlsb21vZGlmaWVkKQoKYGBgCgojIERlc2NyaXB0aXZlcyBvbiBhbGwgdmFyaWFibGVzIE1PRElGSUVEIERBVEEgU0VUOiBVc2luZyBGYXZzdGF0cwojIyBSaXZlciBGbG93IEZhdnN0YXRzCmBgYHtyfQpsaWJyYXJ5KG1vc2FpYykKZmF2c3RhdHMoaGlsb21vZGlmaWVkJGNtcykKYGBgCiMjIENITCBGYXZzdGF0cwpgYGB7cn0KZmF2c3RhdHMoaGlsb21vZGlmaWVkJENobFJGVSkKYGBgCiMjIFR1cmJpdGl0eSBGYXZzdGF0cwpgYGB7cn0KZmF2c3RhdHMoaGlsb21vZGlmaWVkJENvcnIuTlRVKQpgYGAKIyMgU2FsaW5pdHkgRmF2c3RhdHMKYGBge3J9CmZhdnN0YXRzKGhpbG9tb2RpZmllZCRzYWx0cHB0KQpmYXZzdGF0cyhoaWxvbW9kaWZpZWQkVGVtcEMpCmZhdnN0YXRzKGhpbG9tb2RpZmllZCREb3BlcikKYGBgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIE1PRElGSUVEIERBVEEgU0VUIDIwMTMtMjAxNQojIERlc2NyaXB0aXZlczogUGxvdHMKCiMjIFJpdmVyIEZsb3cgTU9ESUZJRUQKYGBge3J9Cmxlbmd0aChoaWxvbW9kaWZpZWQkbG9nY21zW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRsb2djbXMpPT1UUlVFKV0pICMgTm8gTkFzLCBZQVkhCndoaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRsb2djbXMpPT1UUlVFKQoKUml2ZXJGbG93TW9kIDwtIGdncGxvdChoaWxvbW9kaWZpZWQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAogIGdlb21fbGluZSgpCgpwcmludChSaXZlckZsb3dNb2QgKyBnZ3RpdGxlKCJSaXZlciBGbG93IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCiMjIENITCBNT0RJRklFRApgYGB7cn0Kc3VtKGlzLm5hKGhpbG9tb2RpZmllZCRDaGxSRlUpPT1UUlVFKSAjIDE4ODQgTkFzCiN3aGljaChpcy5uYShoaWxvbW9kaWZpZWQkQ2hsUkZVKT09VFJVRSkKIyBtYXgoYXMubnVtZXJpYyhuYS5vbWl0KGhpbG8kQ2hsUkZVKSkpICMgMTUuMwp3aGljaChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRDaGxSRlUpPT0xNS4zKQpoaWxvWzM4OTc0LF0KCkNITE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhDaGxSRlUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoQ0hMTW9kICsgZ2d0aXRsZSgiQ2hsb3JvcGh5bGwgIikrbGFicyh4PSJUaW1lIiwgeSA9ICJDaGxvcm9waHlsbCAgLSByZWxhdGl2ZSBmbHVvcmVzY2VuY2UgdW5pdHMgKFJGVSkiKSkKYGBgCgoKIyBUdXJiaXRpdHkgTU9ESUZJRUQKYGBge3J9Cmxlbmd0aChoaWxvbW9kaWZpZWQkQ29yci5OVFVbd2hpY2goaXMubmEoaGlsb21vZGlmaWVkJENvcnIuTlRVKT09VFJVRSldKSAjIDI3MDQgTkFzCiMgbWF4KGFzLm51bWVyaWMobmEub21pdChoaWxvJENvcnIuTlRVKSkpICMgODguNAp3aGljaChhcy5udW1lcmljKGhpbG8kQ29yci5OVFUpPT04OC40KQpoaWxvWzMzMjQzLF0KClRVUkJNb2QgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoVFVSQk1vZCArIGdndGl0bGUoIlR1cmJpZGl0eSAiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlR1cmJpZGl0eSAtIE5lcGhlbG9tZXRyaWMgVHVyYmlkaXR5IFVuaXRzIChOVFUpIikpCmBgYAoKIyBTYWxpbml0eSBNT0RJRklFRApgYGB7cn0KbGVuZ3RoKGhpbG9tb2RpZmllZCRzYWx0cHB0W3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRzYWx0cHB0KT09VFJVRSldKSAjIDIyNjcgTkFzCgpTQUxUTW9kIDwtIGdncGxvdChoaWxvbW9kaWZpZWQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoU0FMVE1vZCArIGdndGl0bGUoIlNhbGluaXR5IikrbGFicyh4PSJUaW1lIiwgeSA9ICJTYWxpbml0eSAtIHVuaXQgcGFydHMgcGVyIHRob3VzYW5kIChQUFQpIikpCmBgYAojIFRlbXB1cmF0dXJlIE1PRElGSUVECmBgYHtyfQpsZW5ndGgoaGlsb21vZGlmaWVkJFRlbXBDW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCRUZW1wQyk9PVRSVUUpXSkgIyAyMjY3IE5BcwoKVGVtcE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhUZW1wQykpKSArIAogIGdlb21fbGluZSgpCgpwcmludChUZW1wTW9kICsgZ2d0aXRsZSgiVGVtcGVyYXR1cmUiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlRlbXBlcmF0dXJlIC0gQ2Vsc2l1cyIpKQpgYGAKIyBEaXNzb2x2ZWQgT3h5Z2VuIE1PRElGSUVECmBgYHtyfQpsZW5ndGgoaGlsb21vZGlmaWVkJERvcGVyW3doaWNoKGlzLm5hKGhpbG9tb2RpZmllZCREb3Blcik9PVRSVUUpXSkgIyAyMjY3IE5BcwoKVGVtcE1vZCA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhEb3BlcikpKSArIAogIGdlb21fbGluZSgpCgpwcmludChUZW1wTW9kICsgZ2d0aXRsZSgiRGlzc29sdmVkIE94eWdlbiIpK2xhYnMoeD0iVGltZSIsIHkgPSAiRGlzc29sdmVkIE94eWdlbiBpbiBwZXJjZW50IG9mIHNhdHVyYXRpb24iKSkKYGBgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEhpc3RvZ3JhbXMgTU9ESUZJRUQgCgojIyBSaXZlciBGbG93IE1PRElGSUVECmBgYHtyfQpoaXN0KGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJGNtcyksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBSaXZlciBGbG93IiwgeGxhYiA9ICJMb2cgUml2ZXIgRmxvdyIsIGJyZWFrcyA9OTAsIHhsaW0gPSBjKDAsMTAwKSkKCiMgdGhpcyBsb29rcyBva2F5CmBgYAojIyBDSEwgTU9ESUZJRUQKYGBge3J9CiMgVkVSWSBza2V3ZWQKaGlzdChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRDaGxSRlUpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBDaGxvcm9waHlsbCIsIHhsYWIgPSAiQ2hsb3JvcGh5bGwgIC0gcmVsYXRpdmUgZmx1b3Jlc2NlbmNlIHVuaXRzIChSRlUpIikKCiMgdGhpcyBsb29rcyBiZXR0ZXIKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ2hsUkZVKSksIG1haW4gPSAiSGlzdG9ncmFtIG9mIExvZyBDaGxvcm9waHlsbCIsIHhsYWIgPSAiQ2hsb3JvcGh5bGwiKQojIG5vdCBzdXJlIHdoYXQgaGFwcGVucyB0byB1bml0cyB3aGVuIHRha2luZyB0aGUgbG9nIApgYGAKIyMgVHVyYml0aXR5IE1PRElGSUVECmBgYHtyfQojIFZFUlkgc2tld2VkCmhpc3QoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ29yci5OVFUpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBUdXJiaWRpdHkiLCB4bGFiID0gIlR1cmJpZGl0eSAtIE5lcGhlbG9tZXRyaWMgVHVyYmlkaXR5IFVuaXRzIChOVFUpIikKCiMgdGhpcyBsb29rcyBiZXR0ZXIKaGlzdChsb2coYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkQ29yci5OVFUpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFR1cmJpZGl0eSIsIHhsYWIgPSAiVHVyYmlkaXR5IikKIyBub3Qgc3VyZSB3aGF0IGhhcHBlbnMgdG8gdW5pdHMgd2hlbiB0YWtpbmcgdGhlIGxvZyAKYGBgCiMjIFNhbGluaXR5IE1PRElGSUVECmBgYHtyfQojIHNrZXdlZApoaXN0KGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBTYWxpbml0eSIsIHhsYWIgPSAiU2FsaW5pdHkgLSB1bml0IHBhcnRzIHBlciB0aG91c2FuZCAoUFBUKSIpCgojIHRoaXMgaXMgd29yc3QhCmhpc3QobG9nKGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpKSwgbWFpbiA9ICJIaXN0b2dyYW0gb2YgTG9nIFNhbGluaXR5IiwgeGxhYiA9ICJTYWxpbml0eSIpCiMgbm90IHN1cmUgd2hhdCBoYXBwZW5zIHRvIHVuaXRzIHdoZW4gdGFraW5nIHRoZSBsb2cgCmBgYAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIFBsb3Qgd2l0aCBBTEwgVmFyIDIwMTMtMjAxNQpJdCBpcyBoYXJkIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIApgYGB7cn0KQWxsWWVhcnMgPC0gZ2dwbG90KGhpbG9tb2RpZmllZCwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMobG9nY21zKSkpICsgCiAgZ2VvbV9saW5lKCkrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKCnByaW50KEFsbFllYXJzICsgZ2d0aXRsZSgiSGlsbyBCYXkiKStsYWJzKHg9IlRpbWUiLCB5ID0gIlJpdmVyIEZsb3cgLSBjdWJpYyBtZXRlcnMgcGVyIHNlY29uZCIpKQoKYGBgCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBEZXNjcmlwdGl2ZXMgYnkgU3Rvcm0KV2UgYXJlIHBpY2tpbmcgb25lIHN0b3JtIGZyb20gZWFjaCB5ZWFyLiBXZSBjYW4gaW5kaWNhdGUgYSBzdG9ybSBoYXMgb2NjdXJyZWQgYnkgdGhlIGV4dHJlbWUgZXZlbnRzIGluIHRoZSByaXZlciBmbG93IGRhdGEuIApXZSB3aWxsIG5vdCB1c2UgdGhlIGxvZyAod2hpY2ggaXMgbG9nYmFzZTEwKSBpbiBvcmRlciB0byBzZWUgdGhlIGV4dHJlbWUgZXZlbnRzCldoZW4gc2FsaW5pdHkgaXMgYmVsb3cgMzUgdGhpcyBhbHNvIGluZGljYXRlcyBhIHN0b3JtIGhhcyBvY2N1cnJlZC4gCgpXZSB3aWxsIGJyZWFrIHRoZSBkYXRhIHNldCBieSB5ZWFyIHRvIGZpbmQgdGhlIG1vc3QgZXh0cmVtZSBldmVudCBmb3IgZWFjaCB5ZWFyLiAKYGBge3J9CmhpbG8yMDEzIDwtIGhpbG9tb2RpZmllZFsxOjg3NjAsXQoKaGlsbzIwMTQgPC0gaGlsb21vZGlmaWVkWzg3NjE6MTc1MjAsXQoKaGlsbzIwMTUgPC0gaGlsb21vZGlmaWVkWzE3NTIxOmxlbmd0aChoaWxvbW9kaWZpZWRbLDFdKSxdCmBgYAoKIyAyMDEzIERhdGEgJiBQbG90CmBgYHtyfQojIG1heChhcy5udW1lcmljKGhpbG8yMDEzJGxvZ2NtcykpICMgdGhpcyBpcyBsb2cgYmFzZSAxMCAKIyBUaGlzIGlzIE5PVCB0aGUgbmF0dXJhbCBsb2cKbWF4KGFzLm51bWVyaWMoaGlsbzIwMTMkY21zKSkgIyAyMDcuMTg2IAp3aGljaChhcy5udW1lcmljKGhpbG8yMDEzJGNtcykgPT0gbWF4KGFzLm51bWVyaWMoaGlsbzIwMTMkY21zKSkpCgpoaWxvMjAxM1szNTUwLF0KIyBhbGwgdmFsdWVzIGZvciB0aGlzIHN0b3JtIGFyZSBOQQoKcGxvdDIwMTMgPC0gZ2dwbG90KGhpbG8yMDEzLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhzYWx0cHB0KSksIGNvbG9yID0gImRhcmtyZWQiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKCnByaW50KHBsb3QyMDEzICsgZ2d0aXRsZSgiMjAxMyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAoKIyMjIyBTcGxpdCAyMDEzIGludG8gNiBtb250aHMgdG8gZ2V0IGEgYmV0dGVyIHZpc3VhbApgYGB7cn0KIyBSMjAxMy4xIDwtIGdncGxvdChoaWxvMjAxM1sxOihsZW5ndGgoaGlsbzIwMTNbLDFdKS8yKSxdLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKIyAgIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKIyAgIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLCBjb2xvciA9ICJkYXJrcmVkIikgKwojICAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZGFya2dyZWVuIikgKwojICAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImJsdWUiKQojIHByaW50KFIyMDEzLjEgKyBnZ3RpdGxlKCJSaXZlciBGbG93IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKIyBSMjAxMy4xK3lsaW0oMCw0MCkKIyAKIyAKIyBSMjAxMy4yIDwtIGdncGxvdChoaWxvMjAxM1sobGVuZ3RoKGhpbG8yMDEzWywxXSkvMik6bGVuZ3RoKGhpbG8yMDEzWywxXSksXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiMgICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiMgICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKIyAgIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImRhcmtncmVlbiIpICsKIyAgIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJibHVlIikKIyBwcmludChSMjAxMy4yICsgZ2d0aXRsZSgiUml2ZXIgRmxvdyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCiMgUjIwMTMuMit5bGltKDAsNDApCmBgYAoKIyAyMDE0IERhdGEgJiBQbG90CmBgYHtyfQojIE1heCByaXZlciBmbG93IGluIHRoZSBvdmVyYWxsIGRhdGEgc2V0Cm1heChhcy5udW1lcmljKGhpbG8yMDE0JGNtcykpCm1heChhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpKQoKd2hpY2goYXMubnVtZXJpYyhoaWxvMjAxNCRjbXMpID09IG1heChhcy5udW1lcmljKGhpbG8yMDE0JGNtcykpKQoKaGlsbzIwMTRbNTI2MyxdCgpSMjAxNCA8LSBnZ3Bsb3QoaGlsbzIwMTQsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGxvZ2NtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJkYXJrZ3JlZW4iKSArCiAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImJsdWUiKQoKcHJpbnQoUjIwMTQgKyBnZ3RpdGxlKCIyMDE0IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCgoKIyAyMDE1IERhdGEgJiBQbG90CmBgYHtyfQptYXgoYXMubnVtZXJpYyhoaWxvMjAxNSRjbXMpKQoKd2hpY2goYXMubnVtZXJpYyhoaWxvMjAxNSRjbXMpID09IG1heChhcy5udW1lcmljKGhpbG8yMDE1JGNtcykpKQoKaGlsbzIwMTVbNjQ3NSxdCgpSMjAxNSA8LSBnZ3Bsb3QoaGlsbzIwMTUsICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGxvZ2NtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAiZGFya3JlZCIpICsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKENvcnIuTlRVKSksIGNvbG9yPSJkYXJrZ3JlZW4iKSArCiAgZ2VvbV9saW5lKGFlcyh5PWFzLm51bWVyaWMoQ2hsUkZVKSksY29sb3I9ImJsdWUiKQoKcHJpbnQoUjIwMTUgKyBnZ3RpdGxlKCIyMDE1IikrbGFicyh4PSJUaW1lIiwgeSA9ICJSaXZlciBGbG93IC0gY3ViaWMgbWV0ZXJzIHBlciBzZWNvbmQiKSkKYGBgCgoKIyBTZXBhcmF0aW5nIHRoZSBEYXRhIGJ5IFN0b3JtIEV2ZW50cwo9PT09PT09CiMgU2VwYXJhdGluZyB0aGUgRGF0YSBieSBTdG9ybQoKYGBge3J9Cm91dGNvbWVzIDwtIGFzLm51bWVyaWMoaGlsb21vZGlmaWVkJHNhbHRwcHQpPDI1IAppbmRleC5sdDI1IDwtIHdoaWNoKG91dGNvbWVzPT1UUlVFKQoKcG9zcy5zdG9ybXMgPC0gaGlsb21vZGlmaWVkW2luZGV4Lmx0MjUsXQpwb3NzLnN0b3JtcwpgYGAKCgpgYGB7cn0Kb3V0Y29tZXMuMzUgPC0gYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkc2FsdHBwdCk8MzUgCmluZGV4Lmx0MzUgPC0gd2hpY2gob3V0Y29tZXM9PVRSVUUpCmluZGV4Lmx0MjUKcG9zcy5zdG9ybXMzNSA8LSBoaWxvbW9kaWZpZWRbaW5kZXgubHQyNSxdCnBvc3Muc3Rvcm1zMzUKCmhpbG9tb2RpZmllZCRkYXRlWzE2XQpgYGAKCmBgYHtyfQpzdG9ybS4xLjcuMTMgPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsxNDU6MTY4LF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArIAogIGdlb21fbGluZShjb2xvcj0iYmxhY2siKSsKICBnZW9tX2xpbmUoYWVzKHkgPSBhcy5udW1lcmljKHNhbHRwcHQpKSwgY29sb3IgPSAibGlnaHRzdGVlbGJsdWUxIikgKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZXk2OSIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0ia2hha2kiKQoKcHJpbnQoc3Rvcm0uMS43LjEzICsgZ2d0aXRsZSgiU3Rvcm0gMS83LzEzIikrbGFicyh4PSJUaW1lIikpCmBgYAoKIyBUcnlpbmcgdG8gbWFrZSB0aGUgUmFpbmZhbGwgcGxvdCBlYXNpZXIgdG8gcmVhZAoKYGBge3J9ClJpdmVyRmxvdzEgPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsxOjEwMCxdLCAgYWVzKHggPSBkYXRlLCB5ID0gYXMubnVtZXJpYyhjbXMpKSkgKyAKICBnZW9tX2xpbmUoKQoKcHJpbnQoUml2ZXJGbG93ICsgZ2d0aXRsZSgiUml2ZXIgRmxvdyIpK2xhYnMoeD0iVGltZSIsIHkgPSAiUml2ZXIgRmxvdyAtIGN1YmljIG1ldGVycyBwZXIgc2Vjb25kIikpCmBgYAo9PT09PT09CmBgYHtyfQpnZXR3ZCgpCiMgd3JpdGUuY3N2KGhpbG9tb2RpZmllZCxmaWxlPSJIaWxvQmF5TkVXMTN0bzE1LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKYGBgCgojIE5FVyBDaGFuZ2UgaW4gUml2ZXIgRmxvdyBDb2x1bW4gCgpgYGB7cn0KcG9zLm5lZyA8LSBhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpIC0gMTAKCnN0YXJ0IDwtIHZlY3RvcigpCmVuZCA8LSB2ZWN0b3IoKQoKZm9yKGkgaW4gMTpsZW5ndGgocG9zLm5lZykpewogIGlmKGlzVFJVRShwb3MubmVnW2ldIDwgMCAmJiBwb3MubmVnW2krMV0gPiAwKSl7CiAgICBzdGFydFtpXSA8LSBpCiAgfWVsc2UgaWYoaXNUUlVFKHBvcy5uZWdbaV0gPiAwICYmIHBvcy5uZWdbaSsxXSA8IDApKXsKICAgIGVuZFtpXSA8LSBpCiAgICB9Cn0Kc3RhcnQKc3RhcnQ8LXN0YXJ0WyFpcy5uYShzdGFydCldCmxlbmd0aChzdGFydCkKZW5kCmVuZDwtZW5kWyFpcy5uYShlbmQpXQpsZW5ndGgoZW5kKQpgYGAKCgpgYGB7cn0KZm9yKGkgaW4gMTpsZW5ndGgoc3RhcnQpKXsKICBzdG9ybSA8LSBnZ3Bsb3QoaGlsb21vZGlmaWVkWyhzdGFydFtpXS0yNCk6KGVuZFtpXSsyNCksXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZ3JleTY5IikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJraGFraSIpCgpwcmludChzdG9ybSArIGdndGl0bGUoIlN0b3JtIDEvNy8xMyIpK2xhYnMoeD0iVGltZSIpKQp9CgpgYGAKCmBgYHtyfQpDaGFuZ2VSRiA8LSBmdW5jdGlvbih4ID0gdmVjdG9yKCkpewpjaGFuZ2UgPC0gYygwKQogIGZvcihpIGluIDE6KGxlbmd0aCh4KS0xKSl7CiAgICBjaGFuZ2VbaSsxXSA8LSB4W2ldLXhbaSsxXQogIH0KICByZXR1cm4oY2hhbmdlKQp9CmNoYW5nZS52ZWN0b3IgPC0gYyhDaGFuZ2VSRihhcy5udW1lcmljKGhpbG9tb2RpZmllZCRjbXMpKSkKY2hhbmdlLnZlY3RvcgpsZW5ndGgoQ2hhbmdlUkYoYXMubnVtZXJpYyhoaWxvbW9kaWZpZWQkY21zKSkpCmxlbmd0aChoaWxvbW9kaWZpZWQkY21zKSAjIHNhbWUgbGVuZ3RoCgpoaWxvbW9kaWZpZWQkY2hhbmdlQ01TIDwtIGNoYW5nZS52ZWN0b3IKCmhlYWQoaGlsb21vZGlmaWVkKQpgYGAKCmBgYHtyfQojIDEwLTExIG5lZ2F0aXZlIHN0YXJ0IG9mIHN0b3JtCiMgMTEtMTAgcG9zaXRpdmUgZW5kIG9mIHN0b3JtCgpwb3NpdGl2ZS5jaGFuZ2UgPC0gdmVjdG9yKCkKbmVnYXRpdmUuY2hhbmdlIDwtIHZlY3RvcigpCmluZGV4IDwtIHZlY3RvcigpCgoKZm9yKGkgaW4gMTpsZW5ndGgoaGlsb21vZGlmaWVkJGNtcykpewogIGlmIChoaWxvbW9kaWZpZWQkY2hhbmdlQ01TW2ldIDwgMCApewogICAgbmVnYXRpdmUuY2hhbmdlW2ldIDwtIGkKICB9ZWxzZXsKICAgIGlmKGhpbG9tb2RpZmllZCRjaGFuZ2VDTVNbaV0gPiAwKXsKICAgICAgcG9zdGl2ZS5jaGFuZ2VbaV0gPC0gaQogICAgfQogIH0KICBpZihoaWxvbW9kaWZpZWQkY21zW2ldID49IDEwICl7CiAgICBpbmRleFtpXSA8LSBpCiAgfQp9CmluZGV4CnBvc2l0aXZlLmNoYW5nZQpuZWdhdGl2ZS5jaGFuZ2UKbGVuZ3RoKHdoaWNoKGluZGV4ID4gMCkpIAoKc3Rvcm1zIDwtIHNvcnQoYyhwb3NpdGl2ZS5jaGFuZ2UsbmVnYXRpdmUuY2hhbmdlKSwgZGVjcmVhc2luZyA9IEZBTFNFKQpzdG9ybXMKaGlsb3N0b3JtcyA8LSBoaWxvbW9kaWZpZWRbc3Rvcm1zLF0KaGlsb3N0b3JtcwpgYGAKCmBgYHtyfQpzdG9ybSA8LSBnZ3Bsb3QoaGlsb3N0b3Jtc1s1MDoyNTAsXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsKICBnZW9tX2xpbmUoY29sb3I9ImJsYWNrIikrCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZ3JleTY5IikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJraGFraSIpCgpwcmludChzdG9ybSArIGdndGl0bGUoIlN0b3JtIDEvNy8xMyIpK2xhYnMoeD0iVGltZSIpKQpgYGAKCmBgYHtyfQoKdmVjdG9yIDwtIHZlY3RvcigpCmZvcihpIGluIDE6bGVuZ3RoKHN0b3JtcykpewogIGlmKGlzVFJVRShhYnMoc3Rvcm1zW2ldLXN0b3Jtc1tpKzFdKSA+IDEwKSl7CiAgICBzdG9wIDwtIHN0b3Jtc1tpXQogIH1lbHNlewogICAgc3RvcCA8LSAwCiAgfQogIGlmKHN0b3AgPiAwKXsKICAgIHZlY3RvcltpXSA8LSBzdG9wCiAgfQp9CnZlY3Rvclt3aGljaChpcy5uYSh2ZWN0b3IpPT1GQUxTRSldCgpzdG9ybS4xLjcuMTMgPC0gZ2dwbG90KGhpbG9tb2RpZmllZFsxOjgwLF0sICBhZXMoeCA9IGRhdGUsIHkgPSBhcy5udW1lcmljKGNtcykpKSArCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoc2FsdHBwdCkpLCBjb2xvciA9ICJsaWdodHN0ZWVsYmx1ZTEiKSArCiAgZ2VvbV9saW5lKGFlcyh5ID0gYXMubnVtZXJpYyhDb3JyLk5UVSkpLCBjb2xvcj0iZ3JleTY5IikgKwogIGdlb21fbGluZShhZXMoeT1hcy5udW1lcmljKENobFJGVSkpLGNvbG9yPSJraGFraSIpCgpwcmludChzdG9ybS4xLjcuMTMgKyBnZ3RpdGxlKCJTdG9ybSAxLzcvMTMiKStsYWJzKHg9IlRpbWUiKSkKYGBgCgpgYGB7cn0Kc3RhcnRheGlzIDwtIHZlY3RvcigpCmVuZGF4aXMgPC0gdmVjdG9yKCkKaSA8LSAxCndoaWxlIChpIDw9IGxlbmd0aChjaGFuZ2UudmVjdG9yKSkgewogIGlmKGlzVFJVRShjaGFuZ2UudmVjdG9yW2ldIDwgMCkpewogICAgc3RhcnRheGlzW2ldIDwtIFJpdmVyRmxvd1tpXQogIH0KICBpIDwtIGkrMQp9CmJlZ2luPC13aGljaChpcy5uYShzdGFydGF4aXMpID09IEZBTFNFKQpiZWdpbgoKd2hpbGUgKGkgPD0gbGVuZ3RoKGNoYW5nZS52ZWN0b3IpKSB7CiAgaWYoaXNUUlVFKGNoYW5nZS52ZWN0b3JbaV0gPiAwKSl7CiAgICBlbmRheGlzW2ldIDwtIFJpdmVyRmxvd1tpXQogIH0KICBpIDwtIGkrMQp9CmVuZCA8LSB3aGljaChpcy5uYShlbmRheGlzKT09RkFMU0UpCgoKc3Rvcm0uMS43LjEzIDwtIGdncGxvdChoaWxvbW9kaWZpZWRbYmVnaW4sXSwgIGFlcyh4ID0gZGF0ZSwgeSA9IGFzLm51bWVyaWMoY21zKSkpICsgCiAgZ2VvbV9saW5lKGNvbG9yPSJibGFjayIpKwogIGdlb21fbGluZShhZXMoeSA9IGFzLm51bWVyaWMoQ29yci5OVFUpKSwgY29sb3I9ImdyZXk2OSIpICsKICBnZW9tX2xpbmUoYWVzKHk9YXMubnVtZXJpYyhDaGxSRlUpKSxjb2xvcj0ia2hha2kiKQoKcHJpbnQoc3Rvcm0uMS43LjEzICsgZ2d0aXRsZSgiU3Rvcm0gMS83LzEzIikrbGFicyh4PSJUaW1lIikpCgpgYGAKCmBgYHtyfQp3aGlsZSAoaSA8PSBsZW5ndGgoY2hhbmdlLnZlY3RvcikpIHsKICBpZihpc1RSVUUoY2hhbmdlLnZlY3RvcltpXSA8IDApKXsKICAgIHN0YXJ0YXhpc1tpXSA8LSBSaXZlckZsb3dbaV0KICAgIGkgPC0gaSsxCiAgfWVsc2V7CiAgICBpZihpc1RSVUUoY2hhbmdlLnZlY3RvcltpXSA+IDApKXsKICAgICAgZW5kYXhpc1tpXSA8LSBSaXZlckZsb3dbaV0KICAgIH0KICB9Cn0KYGBgCgo=